package com.hhd.cwqs.qs.service;

import com.hhd.cwqs.qs.Params;
import com.hhd.cwqs.utils.CommonUtils;

public class PkBuilder {
    private final Params params;

    public PkBuilder(Params params) {
        this.params = params;
    }

    public static PkBuilder forParams(Params params) {
        return new PkBuilder(params);
    }

    /*
     * 财政区划名称
     * */
    public String MOF_DIV_NAME() {
        return params.getUnit().getDivision();
    }

    /*
     * 1.1 单位会计账套表主键
     * */
    public String JK_ACCT_SET_ID() {
        return CommonUtils.getString(params.getUnit().getDivision(), 2)
                + CommonUtils.getString(params.unitCode(), 12)
                + CommonUtils.getString(params.ACCT_SET_CODE(), 14);
    }

    /*
     * 1.2 单位会计科目表主键
     * GOV_ACCT_CLS_CODE: 单位会计科目代码 4-20 位
     * */
    public String JK_ACCOUNT_CLS_ID(String GOV_ACCT_CLS_CODE) {
        return JK_ACCT_SET_ID() + CommonUtils.getString(GOV_ACCT_CLS_CODE, 4, 20);
    }

    /*
     * 1.3 单位会计凭证主表主键
     * ACCT_PERIOD: 会计期间
     * AGENCY_ACCT_VOUCHER_TYPE: 单位会计记账凭证类型
     * VOUCHER_NO: 记账凭证号
     * */
    public String JK_VOU_ID(String ACCT_PERIOD, String AGENCY_ACCT_VOUCHER_TYPE, String VOUCHER_NO) {
        return JK_ACCT_SET_ID()
                + CommonUtils.getString(ACCT_PERIOD, 2)
                + CommonUtils.getString(AGENCY_ACCT_VOUCHER_TYPE, 2)
                + CommonUtils.getString(VOUCHER_NO, 4);
    }

    /*
     * 1.4 单位会计凭证分录表主键
     * VOU_ID: 凭证主表唯一标识
     * VOU_SEQ: 记账凭证分录序号
     * */
    public String JK_VOU_DET_ID(String JK_VOU_ID, String VOU_SEQ) {
        return JK_VOU_ID + CommonUtils.getString(VOU_SEQ, 4);
    }

    /*
     * 1.5单位会计凭证分录辅助信息表主键
     * VOU_ID: 凭证主表唯一标识
     * VOU_SEQ: 记账凭证分录序号
     * VOU_DETAIL_SEQ: 记账凭证分录辅助信息序号
     * */
    public String JK_VOU_DET_ASS_ID(String JK_VOU_ID, String VOU_SEQ, String VOU_DETAIL_SEQ) {
        return JK_VOU_ID
                + CommonUtils.getString(VOU_SEQ, 4)
                + CommonUtils.getString(VOU_DETAIL_SEQ, 4);
    }

    /*
     * 1.6单位会计现金流量表主键
     * JK_VOU_DET_ID: 凭证分录唯一标识
     * CASH_FLOW_CODE: 现金流量代码
     * */
    public String JK_CASHFLOW_ID(String JK_VOU_DET_ID, String CASH_FLOW_CODE) {
        return JK_VOU_DET_ID + CommonUtils.getString(CASH_FLOW_CODE, 3);
    }

    /*
     * 1.7单位会计盈余与结余差异表主键
     * JK_VOU_ID: 凭证主表唯一标识
     * DIFF_TYPE_CODE: 盈余与结余差异类型代码
     * */
    public String JK_DIFF_ID(String JK_VOU_ID, String DIFF_TYPE_CODE) {
        return JK_VOU_ID + CommonUtils.getString(DIFF_TYPE_CODE, 5);
    }

    /*
     * 1.8单位会计余额发生额汇总表主键
     * ACCT_PERIOD: 会计期间
     * GOV_ACCT_CLS_CODE: 单位会计科目代码
     * SEQ: 自定义顺序号
     * */
    public String JK_BAL_ID(String ACCT_PERIOD, String GOV_ACCT_CLS_CODE, String SEQ) {
        return JK_ACCT_SET_ID()
                + CommonUtils.getString(ACCT_PERIOD, 2)
                + CommonUtils.getString(GOV_ACCT_CLS_CODE, 4, 20)
                + CommonUtils.getString(SEQ, 4);
    }

    /*
    * 1.9单位项目信息主键
    * PRO_CODE: 单位项目信息
    * */
    public String JK_PRO_ID(String PRO_CODE) {
        return CommonUtils.getString(params.getUnit().getDivision(), 2)
                + CommonUtils.getString(params.unitCode(), 12)
                + CommonUtils.getString(PRO_CODE, 4, 20);
    }
}
